在開始今天的探討之前,容許我講一個我小時候讀到的故事。
在東漢末年,曹操在接受劉琮的投降之後,便擁有荊州之地,藉由著這股氣勢,在長坂這個地方大敗劉備,劉備狼狽地躲到了江夏,之後他趕緊派遣出諸葛亮出使柴桑向孫權求援,而諸葛亮不負眾望,使劉備與孫權攜手結成了孫劉聯盟,而在結成聯盟之後,雙方的軍師—周瑜與諸葛亮,便開始討論起如何擊敗曹操,周瑜便向諸葛亮詢問水上作戰該以何種兵器為先,諸葛亮便回答:「箭。」由於軍中箭矢短缺,周瑜便向諸葛亮要求在十天之內打造出十萬支箭,這時諸葛亮回答:「軍情緊迫,我只需三日便可造得十萬支箭。」隨即立下軍令狀,周瑜大吃一驚,因為憑他的聰明才智,完全沒辦法想到如何在三天之內打造出十萬支箭,但三天之後,完完整整的十萬支箭卻呈現在他的眼前,周瑜還來不及讚嘆,曹軍的戰鼓已經敲響,顯然的一場決戰便要開始了,孫曹兩軍對峙於赤壁,此時曹操突然感嘆道:「遙想當年十八路諸侯鎮董卓之時,我曾向文臺將軍發誓,如遇孫曹兩軍對壘,我甘當退避三舍。」於是曹操便下令退軍九十里,周瑜看到曹軍退軍,自認機不可失,便下令全軍趁機追擊,當追了一舍的時候,周瑜突然感覺到了一絲不對勁,立刻點了水軍箭矢的數量,發現數量與諸葛亮上繳十萬支箭之前完全一模一樣,這時他才想出原來諸葛亮造的十萬支箭,全部是從他軍營裡「借」出來的,此時的他憤怒得感嘆道:「我才不及諸葛村夫,乃覺三十里。」
這篇故事是我小時候在街口地攤上花30元買到的《參國演藝》裡面的其中一段內容,這一段故事讓我讀的津津有味,因為在裡面便可看到今天要探討的零知識證明的概念,諸葛亮需要證明出他有在三天之內造出十萬支箭的辦法,然而在三天之後,周瑜即便是看到那十萬支箭,也無法從中得知諸葛亮是用什麼方法來打造出來的,這符合了零知識證明三大特性中最重要的那一項—「零知識」,意思是我身為一個驗證提出證明的人,我只能知道要證明的這項問題是對的,除此之外,我一無所知,我想就是因為這樣,所以才會被叫做「零知識」吧!
剛剛上面有提到,零知識證明有三大特性,那三大特性分別是以下三個:
而我們可以觀察到,基本上零知識證明跟一般的數學證明相當不同,除了他能有極小的機會能夠造假之外,便在於他擁有零知識這個特性,只不過這個零知識證明在證明的問題上並不是所有問題都可以進行零知識證明,至於對於要證明的問題有什麼樣的限制,一樣的,如欲知後事如何,且待明天揭曉。